package ar.edu.caece.compiler.grammar.attributes.tree;

import java.util.ArrayList;
import java.util.List;

public class NodeBloque extends AttributeTreeNode {
	private List<NodeSentencia> sentencias;

	public NodeBloque() {
		sentencias = new ArrayList<NodeSentencia>();
	}
	
	public NodeBloque(NodeBloque attribute) {
		this();
		for(NodeSentencia sentencia : attribute.sentencias) {
			sentencias.add(sentencia);
		}
	}

	public List<NodeSentencia> getSentencias() {
		return sentencias;
	}

	public void setSentencias(List<NodeSentencia> sentencias) {
		this.sentencias = sentencias;
	}
	
	public void addSentencia(NodeSentencia sentencia) {
		this.sentencias.add(sentencia);
	}
	
	public String toString() {
		StringBuilder builder = new StringBuilder("[Nodo Bloque -> Sentencias: ");
		
		for(NodeSentencia sentencia : sentencias) {
			builder.append(sentencia);
		}
		
		return builder.append("]").toString();
	}

	@Override
	public String generateCode() {
		StringBuilder builder = new StringBuilder();
		for(NodeSentencia sentencia : sentencias) {
			builder.append(sentencia.generateCode());
		}
		return builder.toString();
	}

	@Override
	public String generateDeclaration() {
		StringBuilder builder = new StringBuilder();
		for(NodeSentencia sentencia : sentencias) {
			builder.append(sentencia.generateDeclaration());
		}
		return builder.toString();
	}
	
	public void propagateRoot(NodeListaBloques raiz) {
		for(NodeSentencia sentencia : sentencias) {
			sentencia.propagateRoot(raiz);
		}
	}

	public void propagarEntornoSuperior(NodeFuncProc nodeFuncProc) {
		for(NodeSentencia sentencia : sentencias) {
			sentencia.propagarEntornoSuperior(nodeFuncProc);
		}
	}
}
